﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

using System.IO;
using System.Diagnostics; 

namespace prjEMR22_154
{
    public partial class Try : Form
    {
        public Try()
        {
            InitializeComponent();
        }

        private void Try_Load(object sender, EventArgs e)
        {
            panel装饰.Hide();
            Title.Hide();

            if (login.strUType == "管理员")
            {
                label1.Text = "欢迎管理员！";
            }
            else
            {
                label1.Text = "欢迎用户！";
            }
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }

        private void 添加病人_Click(object sender, EventArgs e)
        {
            Title.Text = "添加病人";
            Title.Show();

            //显示窗体
            PatientInfo_new PatientInfo = new PatientInfo_new(); //实例化一个子窗口
            //设置子窗口不显示为顶级窗口
            PatientInfo.TopLevel = false;
            //设置子窗口的样式，没有上面的标题栏
            PatientInfo.FormBorderStyle = FormBorderStyle.None;
            //填充
            PatientInfo.Dock = DockStyle.Fill;
            //清空Panel里面的控件 
            this.contentPanel.Controls.Clear();
            //加入控件
            this.contentPanel.Controls.Add(PatientInfo);
            //让窗体显示
            PatientInfo.Show();


            //按键控制
            panel装饰.Show();
            panel装饰.Location = 添加病人.Location;
            添加病人.BackColor = Color.FromArgb(192, 255, 192);
            添加病人.ForeColor = Color.Blue;
            //复原
            查询编辑病人.BackColor = Color.FromArgb(192, 255, 255);
            药物管理.BackColor = Color.FromArgb(192, 255, 255);
            项目管理.BackColor = Color.FromArgb(192, 255, 255);
            数据备份.BackColor = Color.FromArgb(192, 255, 255);

            查询编辑病人.ForeColor = Color.Black;
            药物管理.ForeColor = Color.Black;
            项目管理.ForeColor = Color.Black;
            数据备份.ForeColor = Color.Black;
        }

        private void 查询编辑病人_Click(object sender, EventArgs e)
        {
            Title.Text = "查询编辑病人";
            Title.Show();

            PatientInfo_inquire PatientInfo = new PatientInfo_inquire(); //实例化一个子窗口
            //设置子窗口不显示为顶级窗口
            PatientInfo.TopLevel = false;
            //设置子窗口的样式，没有上面的标题栏
            PatientInfo.FormBorderStyle = FormBorderStyle.None;
            //填充
            PatientInfo.Dock = DockStyle.Fill;
            //清空Panel里面的控件 
            this.contentPanel.Controls.Clear();
            //加入控件
            this.contentPanel.Controls.Add(PatientInfo);
            //让窗体显示
            PatientInfo.Show();


            //按键控制
            panel装饰.Show();
            panel装饰.Location = 查询编辑病人.Location;
            查询编辑病人.BackColor = Color.FromArgb(192, 255, 192);
            查询编辑病人.ForeColor = Color.Blue;
            //复原
            添加病人.BackColor = Color.FromArgb(192, 255, 255);
            药物管理.BackColor = Color.FromArgb(192, 255, 255);
            项目管理.BackColor = Color.FromArgb(192, 255, 255);
            数据备份.BackColor = Color.FromArgb(192, 255, 255);

            添加病人.ForeColor = Color.Black;
            药物管理.ForeColor = Color.Black;
            项目管理.ForeColor = Color.Black;
            数据备份.ForeColor = Color.Black;
        }

        private void 药物管理_Click(object sender, EventArgs e)
        {
            if (login.strUType == "管理员")
            {
                Title.Text = "药物管理";
                Title.Show();

                Medicine PatientInfo = new Medicine(); //实例化一个子窗口
                //设置子窗口不显示为顶级窗口
                PatientInfo.TopLevel = false;
                //设置子窗口的样式，没有上面的标题栏
                PatientInfo.FormBorderStyle = FormBorderStyle.None;
                //填充
                PatientInfo.Dock = DockStyle.Fill;
                //清空Panel里面的控件 
                this.contentPanel.Controls.Clear();
                //加入控件
                this.contentPanel.Controls.Add(PatientInfo);
                //让窗体显示
                PatientInfo.Show();

                //按键控制
                panel装饰.Show();
                panel装饰.Location = 药物管理.Location;
                药物管理.BackColor = Color.FromArgb(192, 255, 192);
                药物管理.ForeColor = Color.Blue;
                //复原
                添加病人.BackColor = Color.FromArgb(192, 255, 255);
                查询编辑病人.BackColor = Color.FromArgb(192, 255, 255);
                项目管理.BackColor = Color.FromArgb(192, 255, 255);
                数据备份.BackColor = Color.FromArgb(192, 255, 255);

                添加病人.ForeColor = Color.Black;
                查询编辑病人.ForeColor = Color.Black;
                项目管理.ForeColor = Color.Black;
                数据备份.ForeColor = Color.Black;
            }
            else
            {
                MessageBox.Show("权限不足");
            }


           
        }

        private void 项目管理_Click(object sender, EventArgs e)
        {
            Title.Text = "项目管理";
            Title.Show();

            Inspect PatientInfo = new Inspect(); //实例化一个子窗口
            //设置子窗口不显示为顶级窗口
            PatientInfo.TopLevel = false;
            //设置子窗口的样式，没有上面的标题栏
            PatientInfo.FormBorderStyle = FormBorderStyle.None;
            //填充
            PatientInfo.Dock = DockStyle.Fill;
            //清空Panel里面的控件 
            this.contentPanel.Controls.Clear();
            //加入控件
            this.contentPanel.Controls.Add(PatientInfo);
            //让窗体显示
            PatientInfo.Show();

            //按键控制
            panel装饰.Show();
            panel装饰.Location = 项目管理.Location;
            项目管理.BackColor = Color.FromArgb(192, 255, 192);
            项目管理.ForeColor = Color.Blue;
            //复原
            添加病人.BackColor = Color.FromArgb(192, 255, 255);
            查询编辑病人.BackColor = Color.FromArgb(192, 255, 255);
            药物管理.BackColor = Color.FromArgb(192, 255, 255);
            数据备份.BackColor = Color.FromArgb(192, 255, 255);

            添加病人.ForeColor = Color.Black;
            查询编辑病人.ForeColor = Color.Black;
            药物管理.ForeColor = Color.Black;
            数据备份.ForeColor = Color.Black;
        }

        private void 数据备份_Click(object sender, EventArgs e)
        {
            data_save();
        }
        private void data_save()
        {

            // MySQL连接信息  
            string server = "localhost";
            string uid = "root";
            string pwd = "123456";
            string database = "emr"; // 根据你的实际数据库名称修改  
            string charset = "utf8";

            // mysqldump命令模板  
            string backupsql = string.Format("mysqldump --host={0} --default-character-set={1} --lock-tables --routines --force --port=3306 --user={2} --password={3} --quick ",
                server, charset, uid, pwd);

            // mysqldump工具路径  
            string mysqldumpPath = @"E:\mysql-5.7.35-winx64\mysql-5.7.35-winx64\bin";

            // 创建保存文件对话框  
            using (SaveFileDialog sfd = new SaveFileDialog())
            {
                sfd.Filter = "SQL Files (*.sql)|*.sql"; // 设置文件类型过滤器  
                sfd.DefaultExt = "sql"; // 设置默认扩展名  
                sfd.Title = "选择备份文件位置并命名";
                sfd.AddExtension = true; // 自动添加扩展名如果用户未输入  

                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    // 用户选择的备份文件路径  
                    string filePath = sfd.FileName;

                    // 构建mysqldump命令  
                    string cmd = backupsql + database + " > \"" + filePath + "\"";

                    // 执行命令  
                    string result = RunCmd(mysqldumpPath, cmd);

                    // 显示结果（这里可以改为更友好的UI提示）  
                    if (string.IsNullOrEmpty(result) || result.Contains("Warning"))
                    {
                        MessageBox.Show("数据库备份成功！", "提示");
                    }
                    else
                    {
                        MessageBox.Show("数据库备份失败：" + result, "错误");
                    }
                }
            }

        }

        /// <summary>  
        /// 执行命令行命令的函数  
        /// </summary>  
        /// <param name="workingDirectory">工作目录</param>  
        /// <param name="cmd">命令行命令</param>  
        /// <returns>命令执行的错误信息（如果有的话）</returns>  
        private string RunCmd(string workingDirectory, string cmd)
        {
            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.WorkingDirectory = workingDirectory;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            p.Start();
            p.StandardInput.WriteLine(cmd);
            p.StandardInput.WriteLine("exit");
            p.StandardInput.Close();
            p.WaitForExit();
            return p.StandardError.ReadToEnd();
        }

    }
}
